package dao;

import classes.Artikal;



import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ArtikalDAO {
	@SuppressWarnings("unused")
	private final Connection c;
	private final PreparedStatement qSelect, qInsert, qSelectAll, qDelete;
	
	public ArtikalDAO(Connection c) throws Exception {
		this.c = c;
		
		qInsert= c.prepareStatement("INSERT INTO artikal(idArtikal, kolicina, cijena, daLiJeNaAkciji, Poslovnica_idPoslovnica,Proizvod_idProizvod) VALUES(null, ?,?,?,?,?)");
		qSelect= c.prepareStatement("SELECT cijena FROM artikal WHERE  idArtikal= ?");
		qSelectAll = c.prepareStatement("SELECT * FROM artikal");
		qDelete = c.prepareStatement("DELETE FROM artikal WHERE idArtikal=?");
	}

	public int insertArtikal(Artikal a) throws Exception {
		if (a==null)
			throw new Exception("Nije moguce dodati nepostojeci artikal!");
        
		qInsert.setFloat(1, a.getKolicina());
		qInsert.setFloat(2, a.getCijena());
		qInsert.setBoolean(3, a.getDaLiJeNaAkciji());
		qInsert.setInt(4, a.getPoslovnica_idPoslovnica());
		qInsert.setInt(5, a.getProizvod_idProizvod());
		
		try{
			int rezultat= qInsert.executeUpdate();
			return rezultat;
		}
		catch(Exception ex){
			throw new Exception("Greska kod dodavanja artikla!");
		}
	}
	public Artikal selectArtikal(int id) throws Exception {
		qSelect.setInt(1, id);
		ResultSet rs = qSelect.executeQuery();
		if (rs.next()==false)
			throw new Exception("Nema takvog artikla");
		while(rs.next()){
			Artikal a= new Artikal();
			a.setCijena(rs.getFloat("cijena"));
			a.setDaLiJeNaAkciji(rs.getBoolean("daLiJeNaAkciji"));
			a.setIdArtikal(rs.getInt("idArtikal"));
			a.setKolicina(rs.getFloat("kolicina"));
			a.setPoslovnica_idPoslovnica(rs.getInt("poslovnica_idPoslovnica"));
			a.setProizvod_idProizvod(rs.getInt("proizvod_idProizvod"));
			return a;
		}
		 return null;
	}
	public boolean insertArtikalTrue(float kolicina, float cijena,int akcija, int poslovnica, int proizvod) throws Exception {
		qInsert.setFloat(1, kolicina);
		qInsert.setFloat(2, cijena);
		qInsert.setInt(3, akcija);
		qInsert.setInt(4, poslovnica);
		qInsert.setInt(5, proizvod);
		try{
			int r= qInsert.executeUpdate();
			if (r==1)
				return true;
			else 
				return false;
		}
		catch(Exception ex){
			throw new Exception("Greska kod dodavanja marketa!");
		}
		
	}
	
	public List<Artikal> selectSviArtikli() throws Exception{
		ResultSet rs = qSelectAll.executeQuery();
		List<Artikal> artikli = new ArrayList<Artikal>();
		while (rs.next()){
			Artikal a= new Artikal();
			
			a.setIdArtikal(rs.getInt("idArtikal"));
			a.setKolicina(rs.getFloat("kolicina"));
			a.setCijena(rs.getFloat("cijena"));
			a.setDaLiJeNaAkciji(rs.getBoolean("daLiJeNaAkciji"));
			a.setPoslovnica_idPoslovnica(rs.getInt("Poslovnica_idPoslovnica"));
			a.setProizvod_idProizvod(rs.getInt("Proizvod_idProizvod"));
			
			artikli.add(a);
		}
		return artikli;
	}
	
	public float dajCijenu(int id) throws Exception{
		try{
			qSelect.setInt(1, id);
			ResultSet rs=qSelect.executeQuery();
			float cijena=0;;
			
			if(rs.next()){
				cijena=rs.getFloat("cijena");
			}
			return cijena;
		}
		catch(Exception e){
			throw new Exception("Greska kod povrata cijene!");
		}
	}


	public int deleteArtikal(int id) throws Exception {
		qDelete.setInt(1, id);
		return qDelete.executeUpdate();
	}

}
